class Solution {
public:
    vector<string> sqlit(string& sentence,char ch)
    {
        vector<string> ret;
        int begin = 0;
        int pos = 0;
        int size = sentence.size();
        while(pos<size)
        {
            if(sentence[pos] == ch)
            {
                //从begin开始pos此时存在一个单词
                ret.emplace_back(sentence.substr(begin,pos-begin));
                begin = pos+1;
            }
            pos++;
        }
        //到这里还需要处理最后一个单词
        ret.emplace_back(sentence.substr(begin));
        return ret;
    }
    string replaceWords(vector<string>& dictionary, string sentence) 
    {
        //首先将dict中的字符都放入到哈希表中，方便查询
        unordered_map<string,int> dic;
        for(auto& e:dictionary)
        {
            dic[e]++;
        }       
        //然后是将sec中的字符按照空格进行分割出来
        vector<string> words = sqlit(sentence,' ');
        for(auto& word:words)
        {
            for(int i = 0;i<word.size();i++)
            {
                if(dic.count(word.substr(0,1+i)))
                {
                    word = word.substr(0,1+i);
                    break;//这里因为是从最小的字符数量开始寻找的，所以第一次找到的这个字符就是最小的字符
                }
            }
        }
        //重组答案
        string ret;
        for(int i = 0;i<words.size()-1;i++)
        {
            ret.append(words[i]);
            ret.append(" ");
        }
        ret.append(words.back());
        return ret;
    }
};